<?php

namespace Componentes\Model\Entity;

class GenericModel {

    public function __set($name, $value) {
        $method = 'set' . $name;
        if (('mapper' == $name) || !method_exists($this, $method)) {
            throw new Exception('Invalid guestbook property');
        }
        $this->$method($value);
    }

    public function __get($name) {
        $method = 'get' . $name;
        if (('mapper' == $name) || !method_exists($this, $method)) {
            echo $name;
            throw new Exception('Invalid guestbook property');
        }
        return $this->$method();
    }

    public function setOptions(array $options) {
        $methods = get_class_methods($this);
        foreach ($options as $key => $value) {
            //http://php.net/manual/es/function.strnatcmp.php *Comparacion de String completos
            //http://php.net/manual/es/function.substr.php *Devuelve parte de una cadena
            if (strnatcmp(substr($key, 0, 3), 'id_') == 0) {
                http://php.net/manual/es/function.substr-replace.php *Reemplaza el texto dentro de una porción de un string
                $key = substr_replace($key, '', 0, 3);
            }
            $method = 'set' . ucfirst($key);
            if (in_array($method, $methods)) {
                $this->$method($value);
            }
        }
        return $this;
    }

    /**
     * Convierte un Objeto en un Array
     *
     * @param    object  $object El objeto a convertir
     * @reeturn  arreglo
     * 
     */
    function objectToArray() {
        if (is_object($this)) {
            $object = get_object_vars($this);
        }
        return array_map(null, $object);
    }

}

?>